class Rectangle:
    """表示矩形的类"""

    def __init__(self, width, height, name):
        self.hidden_width = width
        self.hidden_height = height
        #双下划线开头的属性是隐藏属性，只能在类的内部访问，无法通过对象访问

        self.__name = name

    def get_width(self):
        return self.hidden_width

    def get_height(self):
        return self.hidden_height

    def get_name(self):
        return "这个矩形的名字是%s" % self.__name

    def set_width(self, width):
        self.hidden_width = width

    def set_height(self, height):
        self.hidden_height = height

    def get_area(self):
        return self.hidden_width * self.hidden_height


r = Rectangle(3, 4,"haha1")
# 通过方法设置属性
r.set_width(5)
r.set_height(6)
# 打印当前对象的属性
print(r.__dict__)
print(r.get_area())

# 但是外部可以通过r.hidden_width,r.hidden_height这种方式继续修改属性，并不是绝对私有的，怎么办呢
# 直接访问p.__name会报错，只能通过get_name方法访问
#　print(r.__name)
# 其实隐藏属性只不过是python自动为属性改了一个名字，就不叫__name了
# 实际上是将名字修改为了，_类名__属性名，比如__name-->_Person__name
print(r._Rectangle__name)
print(r.get_name())